import 'package:logger/logger.dart';

/// 对外暴露 getter，任何文件 `import '.../app_logger.dart'` 后可直接使用 [log].
Logger get log => _AppLogger.instance;

/// 私有单例类
class _AppLogger {
  // 1️⃣ 私有构造
  _AppLogger._internal()
      : _logger = Logger(
          // PrettyPrinter 已满足大部分场景，可根据需要自定义
          printer: PrettyPrinter(
            methodCount: 2,          // 展示调用栈层数
            colors: true,            // 彩色输出
            printEmojis: true,       // emoji 图标
            noBoxingByDefault: true, // 不包围长字符串
          ),
          level: _isProd ? Level.warning : Level.debug,
          filter: _ProdLogFilter(),  // 生产环境自定义过滤
        );

  // 2️⃣ 提供静态唯一实例
  static final _AppLogger _singleton = _AppLogger._internal();
  static Logger get instance => _singleton._logger;

  // 3️⃣ 真实 logger 对象
  final Logger _logger;

  // 根据编译模式切换日志级别
  static const bool _isProd = bool.fromEnvironment('dart.vm.product');
}

/// 可选：生产环境过滤器（示例只保留 warning 以上）
class _ProdLogFilter extends LogFilter {
  @override
  bool shouldLog(LogEvent event) {
    const isProd = bool.fromEnvironment('dart.vm.product');
    return isProd ? event.level.index >= Level.warning.index : true;
  }
}
